package com.ala4.oxcafe.common.utils.text;


import java.util.Objects;

/**
 * 字符串工具类
 *
 * @author PING
 * @version 1.0.0
 * @date 2025/7/30 17:48
 */
public class StrUtil {

    /**
     * 字符串常量：空字符串 {@code ""}
     */
    public static final String EMPTY = "";

    private StrUtil() {
    }

    /**
     * 判断字符串是否为空（null 或空字符串）
     * 示例：StringUtils.isEmpty(null) → true, StringUtils.isEmpty("") → true
     */
    public static boolean isEmpty(String str) {
        return str == null || str.isEmpty();
    }

    /**
     * 判断字符串是否不为空（null 或空字符串）
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }
    /**
     * 判断字符串是否为空白（null、空字符串或仅含空白字符）
     * 示例：StringUtils.isBlank(" \\n ") → true
     */
    public static boolean isBlank(String str) {
        return str == null || str.isBlank(); // JDK 11+ 原生方法[7,8](@ref)
    }

    /**
     * 去除字符串前后空格及换行符（\\n, \\r, \\t 等）
     * 示例：StringUtils.trim("  Hello\\nWorld\\t ") → "Hello\\nWorld"
     */
    public static String trim(String str) {
        return str == null ? null : str.strip(); // JDK 17 增强：支持 Unicode 空白[4,9](@ref)
    }

    /**
     * 安全处理 null 并去空格（若输入为 null 返回空字符串）
     */
    public static String nullSafeTrim(String str) {
        return trim(Objects.toString(str, ""));
    }

    /**
     * 批量检查字符串是否全部非空
     */
    public static boolean allNotEmpty(String... strings) {
        if (strings == null) {
            return false;
        }
        for (String str : strings) {
            if (isEmpty(str)) return false;
        }
        return true;
    }

    /**
     * 首字母小写
     */
    public static String firstLetterToLower(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        char firstChar = str.charAt(0);
        if (Character.isUpperCase(firstChar)) {
            return Character.toLowerCase(firstChar) + str.substring(1);
        }
        return str; // 首字母非大写则直接返回
    }
}
